#include "lnkbasehandler.h"

#include <QDir>

void LNKBaseHandler::add_lnk(const qsizetype &index, const QString& absolute_path)
{
    QString lnk_name = absolute_path.section('/', -1).section(".", 0, 0);;

    // 如果拖入的快捷方式已经存在了，就不添加
    if (index_of(lnk_name) != -1)
        return;

    // 在hub_links中创建快捷方式，创建快捷方式必须在创建AppLNK前面，因为创建AppLNK需要读取快捷方式文件
    QString lnk_path = lnk_dir_ + lnk_name + ".lnk";
    QFile::link(absolute_path, lnk_path);

    auto lnk = create_applnk(lnk_name);
    applnk_list.insert(index, lnk);

    // 刷新配置文件
    write_all();
}

bool LNKBaseHandler::delete_lnk(AppLNK* app_lnk)
{
    // 如果没有这个快捷方式，就不删除
    if (! applnk_list.contains(app_lnk))
        return false;

    // 从hub_links中删除
    bool b = QFile::remove(lnk_dir_ + app_lnk->get_name() + ".lnk");
    if (!b)
        return false;

    app_lnk->hide();
    app_lnk->deleteLater();
    // 从配置文件中删除
    applnk_list.removeOne(app_lnk);
    write_all();
    return true;
}

int LNKBaseHandler::index_of(const QString &lnk_name)
{
    for (int i = 0; i < applnk_list.size(); ++i)
    {
        if (applnk_list.at(i)->get_name() == lnk_name)
            return i;
    }

    return -1;
}

bool LNKBaseHandler::move_lnk(qsizetype index, AppLNK* app_lnk)
{
    // 下标越界或者不存在这个名字的快捷方式
    auto old_index = applnk_list.indexOf(app_lnk);
    if (index < 0 || index > applnk_list.size() || old_index == -1)
        return false;

    if (index > old_index)
        --index;
    applnk_list.move(old_index, index);

    write_all();
    return true;
}

// 读取配置文件
QList<QString> LNKBaseHandler::read_all()
{
    if (! file.exists())
    {
        file.open(QIODevice::WriteOnly);
        file.close();
    }

    file.open(QIODevice::ReadOnly);
    QString word = file.readAll();
    file.close();
    auto ret = word.split("\n");
    ret.pop_back();
    return ret;
}

void LNKBaseHandler::write_all()
{
    file.open(QIODevice::WriteOnly);
    for (const auto& lnk_name : applnk_list)
        file.write((lnk_name->get_name() + "\n").toUtf8());
    file.close();
}

LNKBaseHandler::~LNKBaseHandler()
{
    qDebug() << "LNKBaseHandler 销毁了";
}

